package com.cdeledu.thread3.masterworker;

import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**Master-Worker模式是一种常见的高并发模式，它的核心思想是任务的调度和执行分离，调度任务的角色为Master，执行任务的角色为Worker，
 * Master负责接收、分配任务和合并（Merge）任务结果，Worker负责执行任务。Master-Worker模式是一种归并类型的模式。
 * @author HP
 *
 */
public class MasterWorkerTest {
	// 简单任务
	static class SimpleTask extends Task<Integer> {
		@Override
		protected Integer doExecute() {
			System.out.println("task " + getId() + " is done ");
			return getId();
		}
	}

	public static void main(String[] args) {
		// 创建Master，包含4个Worker，并启动Master的执行线程
		Master<SimpleTask, Integer> master = new Master<>(4);
		ScheduledThreadPoolExecutor exe = new ScheduledThreadPoolExecutor(5);
		// 定期向master提交任务
		exe.scheduleAtFixedRate(() -> master.submit(new SimpleTask()), 0, 2, TimeUnit.SECONDS);
		// 定期从master提取结果
		exe.scheduleAtFixedRate(() -> master.printResult(), 0, 5, TimeUnit.SECONDS);
	}
}